package com.example.flower_shop.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class DecimalUtil {

    /**
     * 将价格从元转换为分
     *
     * @param price 价格（单位为元）
     * @return 转换后的价格（单位为分）
     */
    public static int convertToCent(BigDecimal price) {
        return price.multiply(new BigDecimal("100")).intValue();
    }

    /**
     * 将两个BigDecimal类型的数相乘，并保留两位小数。
     *
     * @param a 第一个BigDecimal类型的数
     * @param b 第二个BigDecimal类型的数
     * @return 返回a和b相乘的结果，并保留两位小数
     */
    public static BigDecimal multiply(BigDecimal a, BigDecimal b) {
        return a.multiply(b).setScale(2, RoundingMode.DOWN);
    }

    public static BigDecimal multiply(BigDecimal a, Integer b) {
        return multiply(a, BigDecimal.valueOf(b));
    }

    /**
     * 将两个BigDecimal类型的数相乘，并将结果从元转换为分。
     *
     * @param a 第一个BigDecimal类型的数
     * @param b 第二个BigDecimal类型的数
     * @return 返回a和b相乘的结果，并将结果从元转换为分
     */
    public static int multiplyToCent(BigDecimal a, BigDecimal b) {
        return convertToCent(multiply(a, b));
    }

    public static BigDecimal divide(Integer a, Integer b) {
        return new BigDecimal(a).divide(new BigDecimal(b), 2, RoundingMode.DOWN);
    }

    public static BigDecimal divideToPercent(Integer a, Integer b) {
        if (a == null || b == null || a == 0) {
            return BigDecimal.ZERO;
        }
        return convertToPercent(divide(a, b));
    }

    public static BigDecimal convertToYuan(BigDecimal totalPaid) {
        return totalPaid.divide(new BigDecimal("100"), 2, RoundingMode.DOWN);
    }

    public static BigDecimal convertToYuan(int totalPaid) {
        return BigDecimal.valueOf(totalPaid).divide(new BigDecimal("100"), 2, RoundingMode.DOWN);
    }

    public static BigDecimal convertToPercent(BigDecimal a) {
        return a.multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN);
    }

    public static BigDecimal vip(BigDecimal price) {
        return multiply(price, new BigDecimal("0.77"));
    }
}
